import { Refs } from 'share/declare'
import { MoniterMap } from 'share/moniter'
import { RteCommandProp } from './command/declate'

export type LengthStyle = string | number | null

export interface RteSelector {
  root: HTMLElement
  toolbar: HTMLElement | null
}

export interface RteRefs extends Refs {
  interim: HTMLStyleElement
  selection: HTMLStyleElement
  root: HTMLDivElement
  toolbarRoot: HTMLDivElement
  toolbar: HTMLDivElement
  main: HTMLDivElement
  editable: HTMLDivElement
  asideRoot: HTMLDivElement
  tooltipRoot: HTMLDivElement
}

interface GrteMoniterArg {
  /** 编辑器实例化完成 */
  created: null
  /** 编辑器准备绑定到 DOM 树中 */
  mount: null
  /** 编辑器已绑定到 DOM 树中 */
  mounted: null
  /** 编辑器准备销毁 */
  unmount: null
  /** 编辑器已销毁 */
  unmounted: null
  /** 鼠标按下 */
  mousedown: null
  /** 鼠标弹起 */
  mouseup: null
  /** 隐藏菜单栏浮动框 */
  hidebar: null
  /** 隐藏浮动菜单栏 */
  hidetip: null
  /** 当前选区设置的样式 */
  issets: RteCommandProp[]
}

type TTF<T> = {
  [K in keyof T]: (ev: T[K]) => void
}

export type GrteMoniterMap = TTF<GrteMoniterArg>
